package com.example.juc.singe;
//dcl饿汉式单例
public class LzayMan {
    private LzayMan(){   System.out.println(Thread.currentThread().getName()+"ok");}
    // 此处必须是volatile
    private static volatile LzayMan lzayMan;

    public static LzayMan Test1(){
        if(lzayMan==null) {
           synchronized (LzayMan.class) {
                if (lzayMan == null) {
                    // 这里实际是三步 不是原子的
                    // 为Singleton分配一块内存M
                    // 在内存M上对Singleton进行初始化
                    // 将内存M地址赋值给singleton变量
                    lzayMan = new LzayMan();
                }
            }
        }
        return lzayMan;
    }

    public static void main(String[] args) {

        for (int i = 1; i <100 ; i++) {
            new Thread(() -> {
                Test1();
            },i+"").start();
        }
    }
}
